home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / edit / thesrc20.zip / default.c < prev    next >
C/C++ Source or Header  |  1995-01-26  |  39KB  |  1,099 lines

  1. /***********************************************************************/
  2. /* DEFAULT.C - Default settings and profile processing                 */
  3. /***********************************************************************/
  4. /*
  5.  * THE - The Hessling Editor. A text editor similar to VM/CMS xedit.
  6.  * Copyright (C) 1991-1995 Mark Hessling
  7.  *
  8.  * This program is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU General Public License as
  10.  * published by the Free Software Foundation; either version 2 of
  11.  * the License, or any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16.  * General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to:
  20.  *
  21.  *    The Free Software Foundation, Inc.
  22.  *    675 Mass Ave,
  23.  *    Cambridge, MA 02139 USA.
  24.  *
  25.  *
  26.  * If you make modifications to this software that you feel increases
  27.  * it usefulness for the rest of the community, please email the
  28.  * changes, enhancements, bug fixes as well as any and all ideas to me.
  29.  * This software is going to be maintained and enhanced as deemed
  30.  * necessary by the community.
  31.  *
  32.  * Mark Hessling                     email: M.Hessling@gu.edu.au
  33.  * 36 David Road                     Phone: +61 7 849 7731
  34.  * Holland Park                      Fax:   +61 7 875 5314
  35.  * QLD 4121
  36.  * Australia
  37.  */
  38.  
  39. /*
  40. $Id: default.c 2.0 1995/01/26 16:30:32 MH Release MH $
  41. */
  42.  
  43. #include <stdio.h>
  44.  
  45. #include "the.h"
  46. #include "proto.h"
  47.  
  48. /*#define DEBUG 1*/
  49. /*--------------------------- global data -----------------------------*/
  50.  bool BEEPx;
  51.  bool CAPREXXOUTx;
  52.  LINETYPE CAPREXXMAXx;
  53.  bool CLEARSCREENx;
  54.  bool CLOCKx;
  55.  CHARTYPE CMDARROWSTABCMDx;
  56.  CHARTYPE EOLx;
  57.  bool ETMODEx;
  58.  bool HEXDISPLAYx;
  59.  bool INSERTMODEx;
  60.  bool LINEND_STATUSx; /* not really global, but used in command_line() */
  61.  CHARTYPE LINEND_VALUEx; /* not really global, but used in command_line() */
  62.  CHARTYPE NONDISPx; 
  63.  CHARTYPE PREFIXx;/* not really global but used in set_screen_defaults() */
  64.  bool REPROFILEx;
  65.  CHARTYPE TABI_ONx;
  66.  CHARTYPE TABI_Nx;
  67.  ROWTYPE STATUSLINEx;
  68.  bool scroll_cursor_stay;   /* determine how page scrolling is handled */
  69.  
  70. /***********************************************************************/
  71. #ifdef PROTO
  72. void set_global_defaults(void)
  73. #else
  74. void set_global_defaults()
  75. #endif
  76. /***********************************************************************/
  77. {
  78. /*------------------------- external data -----------------------------*/
  79.  extern short compatible;
  80.  extern short prefix_width;
  81. /*--------------------------- local data ------------------------------*/
  82. /*--------------------------- processing ------------------------------*/
  83. #ifdef TRACE
  84.  trace_function("default.c: set_global_defaults");
  85. #endif
  86. /*---------------------------------------------------------------------*/
  87. /* Set defaults for all environments first...                          */
  88. /*---------------------------------------------------------------------*/
  89.  BEEPx = FALSE;
  90.  CAPREXXOUTx = FALSE;
  91.  CAPREXXMAXx = 1000L;
  92. #if defined(DOS) || defined(OS2)
  93.  ETMODEx=TRUE;
  94. #else
  95.  ETMODEx=FALSE;
  96. #endif
  97.  INSERTMODEx = FALSE;
  98.  LINEND_VALUEx = '#';
  99.  REPROFILEx = FALSE;
  100.  TABI_ONx = FALSE;
  101.  TABI_Nx = 8;
  102. #ifdef UNIX
  103.  EOLx = EOLOUT_LF;
  104. #endif
  105. #if defined(DOS) || defined(OS2)
  106.  EOLx = EOLOUT_CRLF;
  107. #endif
  108.  STATUSLINEx = 'B';
  109. /*---------------------------------------------------------------------*/
  110. /* Set defaults for individual environments next...                    */
  111. /*---------------------------------------------------------------------*/
  112.  switch(compatible)
  113.    {
  114.     case COMPAT_THE:
  115.          CLEARSCREENx = FALSE;
  116.          CLOCKx = TRUE;
  117.          CMDARROWSTABCMDx = FALSE;
  118.          HEXDISPLAYx = TRUE;
  119.          PREFIXx = PREFIX_ON|PREFIX_LEFT;
  120.          prefix_width = PREFIX_WIDTH;
  121.          LINEND_STATUSx = FALSE;
  122.          NONDISPx = '#';
  123.          scroll_cursor_stay = FALSE;
  124.          break;
  125.     case COMPAT_KEDIT:
  126.          CLEARSCREENx = TRUE;
  127.          CLOCKx = TRUE;
  128.          CMDARROWSTABCMDx = TRUE;
  129.          HEXDISPLAYx = FALSE;
  130.          LINEND_STATUSx = FALSE;
  131.          NONDISPx = '#';
  132.          PREFIXx = PREFIX_OFF;
  133.          prefix_width = PREFIX_WIDTH-1;
  134.          scroll_cursor_stay = TRUE;
  135.          break;
  136.     case COMPAT_XEDIT:
  137.          CLEARSCREENx = TRUE;
  138.          CLOCKx = FALSE;
  139.          CMDARROWSTABCMDx = TRUE;
  140.          HEXDISPLAYx = FALSE;
  141.          LINEND_STATUSx = TRUE;
  142.          NONDISPx = '"';
  143.          PREFIXx = PREFIX_ON|PREFIX_LEFT;
  144.          prefix_width = PREFIX_WIDTH-1;
  145.          scroll_cursor_stay = TRUE;
  146.          break;
  147.    }
  148. #ifdef TRACE
  149.  trace_return();
  150. #endif
  151.  return;
  152. }
  153. /***********************************************************************/
  154. #ifdef PROTO
  155. void set_file_defaults(FILE_DETAILS *filep)
  156. #else
  157. void set_file_defaults(filep)
  158. FILE_DETAILS *filep;
  159. #endif
  160. /***********************************************************************/
  161. {
  162. /*------------------------- external data -----------------------------*/
  163.  extern short compatible;
  164. /*--------------------------- local data ------------------------------*/
  165. /*--------------------------- processing ------------------------------*/
  166. #ifdef TRACE
  167.  trace_function("default.c: set_file_defaults");
  168. #endif
  169. /*---------------------------------------------------------------------*/
  170. /* Set defaults for all environments first...                          */
  171. /*---------------------------------------------------------------------*/
  172.  filep->autosave = 0;
  173.  filep->autosave_alt = 0;
  174.  filep->save_alt = 0;
  175.  filep->tabsout_on = FALSE;
  176.  filep->tabsout_num =  8;
  177.  filep->eolout = EOLx;
  178.  set_up_default_colours(filep);
  179. /*---------------------------------------------------------------------*/
  180. /* Set defaults for individual environments next...                    */
  181. /*---------------------------------------------------------------------*/
  182.  switch(compatible)
  183.    {
  184.     case COMPAT_THE:
  185.          filep->backup = BACKUP_KEEP;
  186.          break;
  187.     case COMPAT_XEDIT:
  188.          filep->backup = BACKUP_OFF;
  189.          break;
  190.     case COMPAT_KEDIT:
  191.          filep->backup = BACKUP_OFF;
  192.          break;
  193.    }
  194. #ifdef TRACE
  195.  trace_return();
  196. #endif
  197.  return;
  198. }
  199. /***********************************************************************/
  200. #ifdef PROTO
  201. void set_view_defaults(VIEW_DETAILS *viewp)
  202. #else
  203. void set_view_defaults(viewp)
  204. VIEW_DETAILS *viewp;
  205. #endif
  206. /***********************************************************************/
  207. {
  208. /*------------------------- external data -----------------------------*/
  209.  extern short compatible;
  210. /*--------------------------- local data ------------------------------*/
  211.  register int i=0;
  212.  short tabinc=0;
  213. /*--------------------------- processing ------------------------------*/
  214. #ifdef TRACE
  215.  trace_function("default.c: set_view_defaults");
  216. #endif
  217. /*---------------------------------------------------------------------*/
  218. /* Set defaults for all environments first...                          */
  219. /*---------------------------------------------------------------------*/
  220.  viewp->arbchar_status =        FALSE;
  221.  viewp->arbchar_single =        '?';
  222.  viewp->arbchar_multiple =      '$';
  223.  viewp->case_locate = CASE_IGNORE;
  224.  viewp->case_change = CASE_RESPECT;
  225.  viewp->case_sort = CASE_RESPECT;
  226.  viewp->cmd_line = 'B';
  227.  viewp->id_line = TRUE;
  228.  viewp->current_row = 6;
  229.  viewp->display_high = 0;
  230.  viewp->display_low = 0;
  231.  viewp->hex = FALSE;
  232.  viewp->margin_left = 1;
  233.  viewp->margin_right = 72;
  234.  viewp->margin_indent = 0;
  235.  viewp->margin_indent_offset = TRUE;
  236.  viewp->msgmode_status = TRUE;
  237.  viewp->position_status = TRUE;
  238.  viewp->newline_aligned = TRUE;
  239.  viewp->scale_base = POSITION_MIDDLE;
  240.  viewp->scale_off = 1;
  241.  viewp->scope_all = FALSE;
  242.  viewp->shadow = TRUE;
  243.  viewp->tab_base = POSITION_BOTTOM;
  244.  viewp->tab_on = FALSE;
  245.  viewp->numtabs = 32;
  246.  viewp->verify_start = 1;
  247.  viewp->verify_col = 1;
  248.  viewp->verify_end = max_line_length;
  249.  viewp->hexshow_on = FALSE;
  250.  viewp->hexshow_base = POSITION_TOP;
  251.  viewp->hexshow_off = 7;
  252.  viewp->wordwrap = FALSE;
  253.  viewp->zone_start = 1;
  254.  viewp->zone_end = max_line_length;
  255.  
  256.  if (viewp->cmd_line == 'O')
  257.    {
  258.     viewp->current_window =     WINDOW_MAIN;
  259.     viewp->previous_window =    WINDOW_MAIN;
  260.    }
  261.  else
  262.    {
  263.     viewp->current_window =        WINDOW_COMMAND;
  264.     viewp->previous_window =       WINDOW_MAIN;
  265.    }
  266. /*---------------------------------------------------------------------*/
  267. /* Set defaults for individual environments next...                    */
  268. /*---------------------------------------------------------------------*/
  269.  switch(compatible)
  270.    {
  271.     case COMPAT_THE:
  272.          viewp->case_enter = CASE_MIXED;
  273.          viewp->current_base = POSITION_TOP;
  274.          viewp->current_off = viewp->current_row;
  275.          viewp->imp_macro = TRUE;
  276.          viewp->imp_os = TRUE;
  277.          viewp->linend_status = FALSE;
  278.          viewp->linend_value = '#';
  279.          viewp->number = TRUE;
  280.          viewp->prefix = PREFIX_ON|PREFIX_LEFT;
  281.          viewp->scale_on = FALSE;
  282.          viewp->stay = TRUE;
  283.          viewp->tab_off = (-3);
  284.          viewp->msgline_base = POSITION_TOP;
  285.          viewp->msgline_off = 2;
  286.          viewp->msgline_rows = 1;
  287.          tabinc = 8;
  288.          break;
  289.     case COMPAT_XEDIT:
  290.          viewp->case_enter = CASE_UPPER;
  291.          viewp->current_base = POSITION_MIDDLE;
  292.          viewp->current_off = 0;
  293.          viewp->imp_macro = TRUE;
  294.          viewp->imp_os = TRUE;
  295.          viewp->linend_status = TRUE;
  296.          viewp->linend_value = '#';
  297.          viewp->number = FALSE;
  298.          viewp->prefix = PREFIX_ON|PREFIX_LEFT;
  299.          viewp->scale_on = TRUE;
  300.          viewp->stay = FALSE;
  301.          viewp->tab_off = (-3);
  302.          viewp->msgline_base = POSITION_TOP;
  303.          viewp->msgline_off = 2;
  304.          viewp->msgline_rows = 8;
  305.          tabinc = 3;
  306.          break;
  307.     case COMPAT_KEDIT:
  308.          viewp->case_enter = CASE_MIXED;
  309.          viewp->current_base = POSITION_MIDDLE;
  310.          viewp->current_off = 0;
  311.          viewp->imp_macro = FALSE;
  312.          viewp->imp_os = FALSE;
  313.          viewp->linend_status = FALSE;
  314.          viewp->linend_value = '#';
  315.          viewp->number = FALSE;
  316.          viewp->prefix = PREFIX_OFF;
  317.          viewp->scale_on = FALSE;
  318.          viewp->stay = TRUE;
  319.          viewp->tab_off = (-2);
  320.          viewp->msgline_base = POSITION_TOP;
  321.          viewp->msgline_off = 2;
  322.          viewp->msgline_rows = 5;
  323.          tabinc = 8;
  324.          break;
  325.    }
  326.  for (i=0;i<MAX_NUMTABS;i++)
  327.      viewp->tabs[i] = 1 + (i*tabinc);
  328. #ifdef TRACE
  329.  trace_return();
  330. #endif
  331.  return;
  332. }
  333. /***********************************************************************/
  334. #ifdef PROTO
  335. short get_profile(CHARTYPE *prf_arg)
  336. #else
  337. short get_profile(prf_arg)
  338. CHARTYPE *prf_arg;
  339. #endif
  340. /***********************************************************************/
  341. {
  342. /*------------------------- external data -----------------------------*/
  343.  extern bool in_profile;
  344.  extern bool in_macro;
  345.  extern CHARTYPE the_profile_file[MAX_FILE_NAME+1];
  346.  extern bool profile_specified;
  347.  extern bool rexx_support;
  348. /*--------------------------- local data ------------------------------*/
  349.  FILE *fp;
  350.  short rc=RC_OK;
  351. /*--------------------------- processing ------------------------------*/
  352. #ifdef TRACE
  353.  trace_function("default.c: get_profile");
  354. #endif
  355. /*---------------------------------------------------------------------*/
  356. /* Check to see if the profile file exists and is readable. If the file*/
  357. /* does not exists or is not readable, return. If a profile file was   */
  358. /* explicitly specified, display an error if it doesn't exist. If the  */
  359. /* file is not readable, whether we specified it or not, display error.*/
  360. /*---------------------------------------------------------------------*/
  361.  if (!file_exists(the_profile_file))
  362.    {
  363.     if (profile_specified)
  364.        display_error(9,the_profile_file,FALSE);
  365. #ifdef TRACE
  366.     trace_return();
  367. #endif
  368.     return(RC_FILE_NOT_FOUND);
  369.    }
  370. /*---------------------------------------------------------------------*/
  371. /* If the file is not readable, error.                                 */
  372. /*---------------------------------------------------------------------*/
  373.  if (!file_readable(the_profile_file))
  374.    {
  375.     display_error(8,the_profile_file,FALSE);
  376. #ifdef TRACE
  377.     trace_return();
  378. #endif
  379.     return(RC_ACCESS_DENIED);
  380.    }
  381. /*---------------------------------------------------------------------*/
  382. /* To get here, we either have a specified a valid profile name or we  */
  383. /* haven't specified a profile file at all.                            */
  384. /*---------------------------------------------------------------------*/
  385.  in_macro = TRUE;
  386. /*---------------------------------------------------------------------*/
  387. /* If REXX is supported, process the macro as a REXX macro...          */
  388. /*---------------------------------------------------------------------*/
  389.  if (rexx_support)
  390.    {
  391.     post_process_line(CURRENT_VIEW,CURRENT_VIEW->focus_line);
  392.     rc = execute_macro_file(the_profile_file,prf_arg);
  393.     if (rc != RC_OK)
  394.       {
  395.        display_error(54,(CHARTYPE *)"",FALSE);
  396.        rc = RC_SYSTEM_ERROR;
  397.       }
  398.    }
  399.  else
  400.    {
  401. /*---------------------------------------------------------------------*/
  402. /* ...otherwise, process the file as a non-REXX macro file...          */
  403. /*---------------------------------------------------------------------*/
  404.     if ((fp = fopen(the_profile_file,"r")) == NULL)
  405.       {
  406.        rc = RC_ACCESS_DENIED;
  407.        display_error(8,the_profile_file,FALSE);
  408.       }
  409.     post_process_line(CURRENT_VIEW,CURRENT_VIEW->focus_line);
  410.     if (rc == RC_OK)
  411.       {
  412.        rc = execute_command_file(fp);
  413.        fclose(fp);
  414.       }
  415.     if (rc == RC_SYSTEM_ERROR)
  416.        display_error(53,"",FALSE);
  417.    }
  418.  in_macro = FALSE;
  419.  
  420. #ifdef TRACE
  421.  trace_return();
  422. #endif
  423.  return(rc);
  424. }
  425. /***********************************************************************/
  426. #ifdef PROTO
  427. short defaults_for_first_file(void)
  428. #else
  429. short defaults_for_first_file()
  430. #endif
  431. /***********************************************************************/
  432. {
  433. /*------------------------- external data -----------------------------*/
  434.  extern VIEW_DETAILS *vd_first;
  435.  extern CHARTYPE number_of_views;
  436. /*--------------------------- local data ------------------------------*/
  437.  register int i=0;
  438. /*--------------------------- processing ------------------------------*/
  439. #ifdef TRACE
  440.  trace_function("default.c: defaults_for_first_file");
  441. #endif
  442. /*---------------------------------------------------------------------*/
  443. /* Add to view linked list.                                            */
  444. /*---------------------------------------------------------------------*/
  445.  if ((CURRENT_VIEW = vll_add(vd_first,vd_current,sizeof(VIEW_DETAILS)))
  446.                    == (VIEW_DETAILS *)NULL)
  447.    {
  448. #ifdef TRACE
  449.     trace_return();
  450. #endif
  451.     return(RC_OUT_OF_MEMORY);
  452.    }
  453.  if (vd_first == (VIEW_DETAILS *)NULL)
  454.     vd_first = CURRENT_VIEW;
  455.  
  456.  set_view_defaults(CURRENT_VIEW);
  457.  
  458.  CURRENT_VIEW->mark_type = 0;
  459.  CURRENT_VIEW->marked_line = FALSE;
  460.  CURRENT_VIEW->marked_col = FALSE;
  461.  CURRENT_VIEW->mark_start_line = 0;
  462.  CURRENT_VIEW->mark_end_line = 0;
  463.  CURRENT_VIEW->mark_start_col = 0;
  464.  CURRENT_VIEW->mark_end_col = 0;
  465.  CURRENT_VIEW->focus_line = 0L;
  466.  CURRENT_VIEW->current_line = 0L;
  467.  CURRENT_VIEW->current_column = 0;
  468.  for (i=0;i<VIEW_WINDOWS;i++)
  469.     CURRENT_VIEW->x[i] = CURRENT_VIEW->y[i] = 0;
  470.  
  471.  CURRENT_FILE = (FILE_DETAILS *)NULL;
  472.  
  473.  CURRENT_SCREEN.screen_view = CURRENT_VIEW;
  474.  
  475.  number_of_views++;
  476.  if (CURRENT_VIEW->cmd_line == 'O')
  477.    {
  478.     CURRENT_VIEW->current_window =     WINDOW_MAIN;
  479.     CURRENT_VIEW->previous_window =    WINDOW_MAIN;
  480.    }
  481.  else
  482.    {
  483.     CURRENT_VIEW->current_window =        WINDOW_COMMAND;
  484.     CURRENT_VIEW->previous_window =       WINDOW_MAIN;
  485.    }
  486. #ifdef TRACE
  487.  trace_return();
  488. #endif
  489.  return(RC_OK);
  490. }
  491. /***********************************************************************/
  492. #ifdef PROTO
  493. short defaults_for_other_files(bool same_file)
  494. #else
  495. short defaults_for_other_files(same_file)
  496. bool same_file;
  497. #endif
  498. /***********************************************************************/
  499. {
  500. /*------------------------- external data -----------------------------*/
  501.  extern VIEW_DETAILS *vd_first;
  502.  extern CHARTYPE number_of_views;
  503. /*--------------------------- local data ------------------------------*/
  504.  register int i=0;
  505. /*--------------------------- processing ------------------------------*/
  506. #ifdef TRACE
  507.  trace_function("default.c: defaults_for_other_files");
  508. #endif
  509.  if ((CURRENT_VIEW = vll_add(vd_first,vd_current,sizeof(VIEW_DETAILS)))
  510.                    == (VIEW_DETAILS *)NULL)
  511.    {
  512. #ifdef TRACE
  513.     trace_return();
  514. #endif
  515.     return(RC_OUT_OF_MEMORY);
  516.    }
  517.  if (vd_first == (VIEW_DETAILS *)NULL)
  518.     vd_first = CURRENT_VIEW;
  519.  
  520.  if (same_file)
  521.    {
  522.     CURRENT_VIEW->current_line =    PREVIOUS_VIEW->current_line;
  523.     CURRENT_VIEW->current_column =  PREVIOUS_VIEW->current_column;
  524.     CURRENT_VIEW->display_high =    PREVIOUS_VIEW->display_high;
  525.     CURRENT_VIEW->display_low =     PREVIOUS_VIEW->display_low;
  526.     CURRENT_VIEW->hex =             PREVIOUS_VIEW->hex;
  527.     CURRENT_VIEW->newline_aligned = PREVIOUS_VIEW->newline_aligned;
  528.     CURRENT_VIEW->scope_all =       PREVIOUS_VIEW->scope_all;
  529.     CURRENT_VIEW->shadow =          PREVIOUS_VIEW->shadow;
  530.     CURRENT_VIEW->stay =            PREVIOUS_VIEW->stay;
  531.     CURRENT_VIEW->hexshow_on =      PREVIOUS_VIEW->hexshow_on;
  532.     CURRENT_VIEW->hexshow_base =    PREVIOUS_VIEW->hexshow_base;
  533.     CURRENT_VIEW->hexshow_off =     PREVIOUS_VIEW->hexshow_off;
  534.     CURRENT_VIEW->verify_start =    PREVIOUS_VIEW->verify_start;
  535.     CURRENT_VIEW->verify_col =      PREVIOUS_VIEW->verify_col;
  536.     CURRENT_VIEW->verify_end =      PREVIOUS_VIEW->verify_end;
  537.     CURRENT_VIEW->zone_start =      PREVIOUS_VIEW->zone_start;
  538.     CURRENT_VIEW->zone_end =        PREVIOUS_VIEW->zone_end;
  539.     
  540.     for (i=0;i<VIEW_WINDOWS;i++)
  541.       {
  542.        CURRENT_VIEW->y[i] = PREVIOUS_VIEW->y[i];
  543.        CURRENT_VIEW->x[i] = PREVIOUS_VIEW->x[i];
  544.       }
  545.  
  546.     CURRENT_VIEW->focus_line =      PREVIOUS_VIEW->focus_line;
  547.     CURRENT_VIEW->mark_type =       PREVIOUS_VIEW->mark_type;
  548.     CURRENT_VIEW->marked_line =     PREVIOUS_VIEW->marked_line;
  549.     CURRENT_VIEW->marked_col =      PREVIOUS_VIEW->marked_col;
  550.     CURRENT_VIEW->mark_start_line = PREVIOUS_VIEW->mark_start_line;
  551.     CURRENT_VIEW->mark_end_line =   PREVIOUS_VIEW->mark_end_line;
  552.     CURRENT_VIEW->mark_start_col =  PREVIOUS_VIEW->mark_start_col;
  553.     CURRENT_VIEW->mark_end_col =    PREVIOUS_VIEW->mark_end_col;
  554.    }
  555.  else
  556.    {
  557.     set_view_defaults(CURRENT_VIEW);
  558.     CURRENT_VIEW->focus_line = 0L;
  559.     CURRENT_VIEW->current_line = 0L;
  560.     CURRENT_VIEW->current_column = 0;
  561.     CURRENT_VIEW->mark_type = 0;
  562.     CURRENT_VIEW->marked_line = FALSE;
  563.     CURRENT_VIEW->marked_col = FALSE;
  564.     CURRENT_VIEW->mark_start_line = 0;
  565.     CURRENT_VIEW->mark_end_line = 0;
  566.     CURRENT_VIEW->mark_start_col = 0;
  567.     CURRENT_VIEW->mark_end_col = 0;
  568.     for (i=0;i<VIEW_WINDOWS;i++)
  569.       {
  570.        CURRENT_VIEW->y[i] = CURRENT_VIEW->x[i] = 0;
  571.       }
  572.    }
  573.  
  574.  CURRENT_VIEW->arbchar_status =  PREVIOUS_VIEW->arbchar_status;
  575.  CURRENT_VIEW->arbchar_single =  PREVIOUS_VIEW->arbchar_single;
  576.  CURRENT_VIEW->arbchar_multiple= PREVIOUS_VIEW->arbchar_multiple;
  577.  CURRENT_VIEW->case_enter =      PREVIOUS_VIEW->case_enter;
  578.  CURRENT_VIEW->case_locate =     PREVIOUS_VIEW->case_locate;
  579.  CURRENT_VIEW->case_change =     PREVIOUS_VIEW->case_change;
  580.  CURRENT_VIEW->case_sort =       PREVIOUS_VIEW->case_sort;
  581.  CURRENT_VIEW->cmd_line =        PREVIOUS_VIEW->cmd_line;
  582.  CURRENT_VIEW->id_line =         PREVIOUS_VIEW->id_line;
  583.  CURRENT_VIEW->current_base =    PREVIOUS_VIEW->current_base;
  584.  CURRENT_VIEW->current_off =     PREVIOUS_VIEW->current_off;
  585.  CURRENT_VIEW->current_row =     PREVIOUS_VIEW->current_row;
  586.  CURRENT_VIEW->imp_macro =       PREVIOUS_VIEW->imp_macro;
  587.  CURRENT_VIEW->imp_os =          PREVIOUS_VIEW->imp_os;
  588.  CURRENT_VIEW->linend_status =   PREVIOUS_VIEW->linend_status;
  589.  CURRENT_VIEW->linend_value =    PREVIOUS_VIEW->linend_value;
  590.  CURRENT_VIEW->margin_left =     PREVIOUS_VIEW->margin_left;
  591.  CURRENT_VIEW->margin_right =    PREVIOUS_VIEW->margin_right;
  592.  CURRENT_VIEW->margin_indent =   PREVIOUS_VIEW->margin_indent;
  593.  CURRENT_VIEW->margin_indent_offset = PREVIOUS_VIEW->margin_indent_offset;
  594.  CURRENT_VIEW->msgmode_status =  PREVIOUS_VIEW->msgmode_status;
  595.  CURRENT_VIEW->position_status = PREVIOUS_VIEW->position_status;
  596.  CURRENT_VIEW->msgline_base =    PREVIOUS_VIEW->msgline_base;
  597.  CURRENT_VIEW->msgline_off =     PREVIOUS_VIEW->msgline_off;
  598.  CURRENT_VIEW->msgline_rows =    PREVIOUS_VIEW->msgline_rows;
  599.  CURRENT_VIEW->number =          PREVIOUS_VIEW->number;
  600.  CURRENT_VIEW->prefix =          PREVIOUS_VIEW->prefix;
  601.  CURRENT_VIEW->scale_base =      PREVIOUS_VIEW->scale_base;
  602.  CURRENT_VIEW->scale_off =       PREVIOUS_VIEW->scale_off;
  603.  CURRENT_VIEW->scale_on =        PREVIOUS_VIEW->scale_on;
  604.  CURRENT_VIEW->tab_base =        PREVIOUS_VIEW->tab_base;
  605.  CURRENT_VIEW->tab_off =         PREVIOUS_VIEW->tab_off;
  606.  CURRENT_VIEW->tab_on =          PREVIOUS_VIEW->tab_on;
  607.  CURRENT_VIEW->wordwrap =        PREVIOUS_VIEW->wordwrap;
  608.  CURRENT_VIEW->numtabs =         PREVIOUS_VIEW->numtabs;
  609.  memcpy(CURRENT_VIEW->tabs,PREVIOUS_VIEW->tabs,MAX_NUMTABS*sizeof(LENGTHTYPE));
  610.  
  611.  CURRENT_FILE = (FILE_DETAILS *)NULL;
  612.  
  613.  CURRENT_SCREEN.screen_view = CURRENT_VIEW;
  614.  
  615.  number_of_views++;
  616.  if (CURRENT_VIEW->cmd_line == 'O')
  617.    {
  618.     CURRENT_VIEW->current_window =     WINDOW_MAIN;
  619.     CURRENT_VIEW->previous_window =    WINDOW_MAIN;
  620.    }
  621.  else
  622.    {
  623.     CURRENT_VIEW->current_window =        WINDOW_COMMAND;
  624.     CURRENT_VIEW->previous_window =       WINDOW_MAIN;
  625.    }
  626.  
  627. #ifdef TRACE
  628.  trace_return();
  629. #endif
  630.  return(RC_OK);
  631. }
  632. /***********************************************************************/
  633. #ifdef PROTO
  634. short default_file_attributes(FILE_DETAILS *fd)
  635. #else
  636. short default_file_attributes(fd)
  637. FILE_DETAILS *fd;
  638. #endif
  639. /***********************************************************************/
  640. {
  641. /*------------------------- external data -----------------------------*/
  642. /*--------------------------- local data ------------------------------*/
  643.  RESERVED *curr=NULL;
  644.  short rc=RC_OK;
  645. /*--------------------------- processing ------------------------------*/
  646. #ifdef TRACE
  647.  trace_function("default.c: default_file_attributes");
  648. #endif
  649.  
  650.  set_file_defaults(CURRENT_FILE);
  651.  
  652.  CURRENT_FILE->fname =           (CHARTYPE *)NULL;
  653.  CURRENT_FILE->fpath =           (CHARTYPE *)NULL;
  654.  CURRENT_FILE->file_views =      1;
  655.  CURRENT_FILE->first_line =      (LINE *)NULL;
  656.  CURRENT_FILE->last_line =       (LINE *)NULL;
  657.  CURRENT_FILE->first_reserved  = (RESERVED *)NULL;
  658.  CURRENT_FILE->fmode =           FMODE;
  659.  CURRENT_FILE->pseudo_file =     PSEUDO_REAL;
  660.  CURRENT_FILE->first_ppc = CURRENT_FILE->last_ppc = NULL;
  661. /*---------------------------------------------------------------------*/
  662. /* Set defaults for the current file based on the settings for the     */
  663. /* previous file. The defaults to copy are:                            */
  664. /* - colours, reserved lines.                                          */
  665. /*---------------------------------------------------------------------*/
  666.  if (fd != NULL)
  667.    {
  668.     memcpy(CURRENT_FILE->attr,fd->attr,ATTR_MAX*sizeof(COLOUR_ATTR));
  669.     curr = fd->first_reserved;
  670.     while(curr!=NULL)
  671.       {
  672.        rc = add_reserved_line(curr->spec,curr->line,curr->base,curr->off,
  673.                         curr->attr);
  674.        if (rc != RC_OK)
  675.           break;
  676.        curr = curr->next;
  677.       }
  678.    }
  679. #ifdef TRACE
  680.  trace_return();
  681. #endif
  682.  return(rc);
  683. }
  684. /***********************************************************************/
  685. #ifdef PROTO
  686. void set_screen_defaults(void)
  687. #else
  688. void set_screen_defaults()
  689. #endif
  690. /***********************************************************************/
  691. {
  692. /*------------------------- external data -----------------------------*/
  693.  extern CHARTYPE display_screens;
  694.  extern bool horizontal;
  695. /*--------------------------- local data ------------------------------*/
  696.  register int i=0;
  697.  register int j=0;
  698.  ROWTYPE cmdline=0;
  699.  CHARTYPE prefix=0;
  700.  ROWTYPE start_row=0,number_rows_less=0,idline_rows;
  701. /*--------------------------- processing ------------------------------*/
  702. #ifdef TRACE
  703.  trace_function("default.c: set_screen_defaults");
  704. #endif
  705. /*---------------------------------------------------------------------*/
  706. /* Set values that affect the placement of each screen depending on    */
  707. /* the position of the status line...                                  */
  708. /*---------------------------------------------------------------------*/
  709.  switch(STATUSLINEx)
  710.    {
  711.     case 'B':
  712.          start_row = 0;
  713.          number_rows_less = 1;
  714.          break;
  715.     case 'T':
  716.          start_row = 1;
  717.          number_rows_less = 1;
  718.          break;
  719.     case 'O':
  720.     case 'G':
  721.          start_row = 0;
  722.          number_rows_less = 0;
  723.          break;
  724.    }
  725. /*---------------------------------------------------------------------*/
  726. /* Determine size of overall screen dimensions...                      */
  727. /*---------------------------------------------------------------------*/
  728.  if (horizontal)
  729.    {
  730.     screen[0].screen_rows = (LINES - number_rows_less) / display_screens;
  731.     screen[0].screen_cols = COLS;
  732.     screen[0].screen_start_row = start_row;
  733.     screen[0].screen_start_col = 0;
  734.     if (display_screens == 1)
  735.       {
  736.        screen[1].screen_rows = 0;
  737.        screen[1].screen_cols = 0;
  738.        screen[1].screen_start_row = 0;
  739.        screen[1].screen_start_col = 0;
  740.       }
  741.     else
  742.       {
  743.        screen[1].screen_rows = (LINES - number_rows_less) - screen[0].screen_rows;
  744.        screen[1].screen_cols = COLS;
  745.        screen[1].screen_start_row = screen[0].screen_rows + start_row;
  746.        screen[1].screen_start_col = 0;
  747.       }
  748.    }
  749.  else
  750.    {
  751.     screen[0].screen_rows = LINES - number_rows_less;
  752.     screen[0].screen_cols = (COLS / display_screens)-((display_screens == 1) ? 0 : 1);
  753.     screen[0].screen_start_row = start_row;
  754.     screen[0].screen_start_col = 0;
  755.     if (display_screens == 1)
  756.       {
  757.        screen[1].screen_rows = 0;
  758.        screen[1].screen_cols = 0;
  759.        screen[1].screen_start_row = 0;
  760.        screen[1].screen_start_col = 0;
  761.       }
  762.     else
  763.       {
  764.        screen[1].screen_rows = LINES - number_rows_less;
  765.        screen[1].screen_cols = COLS - screen[0].screen_cols - 2;
  766.        screen[1].screen_start_row = start_row;
  767.        screen[1].screen_start_col = screen[0].screen_cols + 2;
  768.       }
  769.    }
  770. /*---------------------------------------------------------------------*/
  771. /* Reset window sizes to zero...                                       */
  772. /*---------------------------------------------------------------------*/
  773.  for (i=0;i<MAX_SCREENS;i++)
  774.    {
  775.     for (j=0;j<VIEW_WINDOWS;j++)
  776.       {
  777.        screen[i].start_row[j] = 0;
  778.        screen[i].start_col[j] = 0;
  779.        screen[i].rows[j] = 0;
  780.        screen[i].cols[j] = 0;
  781.       }
  782.    }
  783. /*---------------------------------------------------------------------*/
  784. /* Determine size of each window for each screen...                    */
  785. /*---------------------------------------------------------------------*/
  786.  for (i=0;i<display_screens;i++)
  787.    {
  788.     if (screen[i].screen_view == (VIEW_DETAILS *)NULL)
  789.       {
  790.        cmdline = 'B';
  791.        idline_rows = 1;
  792.        prefix = PREFIXx;
  793.       }
  794.     else
  795.       {
  796.        cmdline = screen[i].screen_view->cmd_line;
  797.        idline_rows = (screen[i].screen_view->id_line) ? 1 : 0;
  798.        prefix = screen[i].screen_view->prefix;
  799.       }
  800.     switch(cmdline)
  801.       {
  802.        case 'T':                                   /* command line on top */
  803.             screen[i].start_row[WINDOW_MAIN] = screen[i].screen_start_row + 1 + idline_rows;
  804.             screen[i].rows[WINDOW_MAIN] = screen[i].screen_rows - 1 - idline_rows;
  805.             screen[i].start_row[WINDOW_COMMAND] = screen[i].screen_start_row + idline_rows;
  806.             screen[i].rows[WINDOW_COMMAND] = 1;
  807.             screen[i].cols[WINDOW_COMMAND] = screen[i].screen_cols-PREFIX_WIDTH;
  808.             screen[i].start_row[WINDOW_ARROW] = screen[i].start_row[WINDOW_COMMAND];
  809.             screen[i].rows[WINDOW_ARROW] = 1;
  810.             screen[i].cols[WINDOW_ARROW] = PREFIX_WIDTH;
  811.             break;
  812.        case 'B':                                /* command line on bottom */
  813.             screen[i].start_row[WINDOW_MAIN] = screen[i].screen_start_row + idline_rows;
  814.             screen[i].rows[WINDOW_MAIN] = screen[i].screen_rows - 1 - idline_rows;
  815.             screen[i].start_row[WINDOW_COMMAND] = screen[i].screen_start_row + screen[i].screen_rows - 1;
  816.             screen[i].rows[WINDOW_COMMAND] = 1;
  817.             screen[i].cols[WINDOW_COMMAND] = screen[i].screen_cols-PREFIX_WIDTH;
  818.             screen[i].start_row[WINDOW_ARROW] = screen[i].start_row[WINDOW_COMMAND];
  819.             screen[i].rows[WINDOW_ARROW] = 1;
  820.             screen[i].cols[WINDOW_ARROW] = PREFIX_WIDTH;
  821.             break;
  822.        case 'O':                                      /* command line off */
  823.             screen[i].start_row[WINDOW_MAIN] = screen[i].screen_start_row + idline_rows;
  824.             screen[i].rows[WINDOW_MAIN] = screen[i].screen_rows - idline_rows;
  825.             screen[i].start_row[WINDOW_COMMAND] = 0;
  826.             screen[i].rows[WINDOW_COMMAND] = 0;
  827.             screen[i].cols[WINDOW_COMMAND] = 0;
  828.             screen[i].start_row[WINDOW_ARROW] = 0;
  829.             screen[i].rows[WINDOW_ARROW] = 0;
  830.             screen[i].cols[WINDOW_ARROW] = 0;
  831.             break;
  832.       }
  833.     screen[i].start_col[WINDOW_ARROW] = screen[i].screen_start_col;
  834.     screen[i].start_col[WINDOW_COMMAND] = screen[i].screen_start_col+PREFIX_WIDTH;
  835.     if (idline_rows == 1)
  836.       {
  837.        screen[i].start_row[WINDOW_IDLINE] = screen[i].screen_start_row;
  838.        screen[i].start_col[WINDOW_IDLINE] = screen[i].screen_start_col;
  839.        screen[i].rows[WINDOW_IDLINE] = 1;
  840.        screen[i].cols[WINDOW_IDLINE] = screen[i].screen_cols;
  841.       }
  842.     if (prefix)
  843.       {
  844.        screen[i].start_row[WINDOW_PREFIX] = screen[i].start_row[WINDOW_MAIN];
  845.        screen[i].rows[WINDOW_PREFIX] = screen[i].rows[WINDOW_MAIN];
  846.        screen[i].cols[WINDOW_PREFIX] = PREFIX_WIDTH;
  847.        screen[i].cols[WINDOW_MAIN] = screen[i].screen_cols-PREFIX_WIDTH;
  848.        if ((prefix&PREFIX_LOCATION_MASK) == PREFIX_LEFT)
  849.          {
  850.           screen[i].start_col[WINDOW_PREFIX] = screen[i].screen_start_col;
  851.           screen[i].start_col[WINDOW_MAIN] = screen[i].screen_start_col+PREFIX_WIDTH;
  852.          }
  853.        else
  854.          {
  855.           screen[i].start_col[WINDOW_MAIN] = screen[i].screen_start_col;
  856.           screen[i].start_col[WINDOW_PREFIX] = (screen[i].screen_start_col+screen[i].screen_cols)-PREFIX_WIDTH;
  857.          }
  858.       }
  859.     else
  860.       {
  861.        screen[i].cols[WINDOW_MAIN] = screen[i].screen_cols;
  862.        screen[i].start_col[WINDOW_MAIN] = screen[i].screen_start_col;
  863.        screen[i].rows[WINDOW_PREFIX] = 0;
  864.        screen[i].cols[WINDOW_PREFIX] = 0;
  865.       }
  866.    }
  867. /*---------------------------------------------------------------------*/
  868. /* We now have the size of each screen, so we can allocate the display */
  869. /* line arrays.                                                        */
  870. /*---------------------------------------------------------------------*/
  871.  if (screen[0].sl != NULL)
  872.    {
  873.     (*the_free)(screen[0].sl);
  874.     screen[0].sl = NULL;
  875.    }
  876.  if (screen[1].sl != NULL)
  877.    {
  878.     (*the_free)(screen[1].sl);
  879.     screen[1].sl = NULL;
  880.    }
  881.  if ((screen[0].sl = (SHOW_LINE *)(*the_malloc)(screen[0].rows[WINDOW_MAIN]*sizeof(SHOW_LINE))) == NULL)
  882.    {
  883.     display_error(30,"",FALSE);
  884.     exit_clean(1);
  885.    }
  886.  if (display_screens > 1)
  887.    {
  888.     if ((screen[1].sl = (SHOW_LINE *)(*the_malloc)(screen[1].rows[WINDOW_MAIN]*sizeof(SHOW_LINE))) == NULL)
  889.       {
  890.        display_error(30,"",FALSE);
  891.        exit_clean(1);
  892.       }
  893.    }
  894. #ifdef TRACE
  895.  trace_return();
  896. #endif
  897.  return;
  898. }
  899. /***********************************************************************/
  900. #ifdef PROTO
  901. void set_defaults(void)
  902. #else
  903. void set_defaults()
  904. #endif
  905. /***********************************************************************/
  906. {
  907. /*------------------------- external data -----------------------------*/
  908.  extern CHARTYPE *cmd_rec;
  909.  extern LENGTHTYPE cmd_rec_len;
  910. /*--------------------------- local data ------------------------------*/
  911. /*--------------------------- processing ------------------------------*/
  912. #ifdef TRACE
  913.  trace_function("default.c: set_defaults");
  914. #endif
  915. /*---------------------------------------------------------------------*/
  916. /* Set up screen default sizes using the temp values of LINES and COLS.*/
  917. /* These will be overwritten by initscr().                             */
  918. /*---------------------------------------------------------------------*/
  919.  set_screen_defaults();
  920. /*---------------------------------------------------------------------*/
  921. /* Allocate memory to cmd_rec and set it to blanks.                    */
  922. /*---------------------------------------------------------------------*/
  923.  if (cmd_rec != NULL)
  924.     (*the_free)(cmd_rec);
  925.  if ((cmd_rec = (CHARTYPE *)(*the_malloc)((COLS+1)*sizeof(CHARTYPE))) == NULL)
  926.     exit_clean(1);
  927.  memset(cmd_rec,' ',COLS);
  928.  cmd_rec_len = 0;
  929.  
  930. #ifdef TRACE
  931.  trace_return();
  932. #endif
  933.  return;
  934. }
  935. /***********************************************************************/
  936. #ifdef PROTO
  937. short set_THE_defaults(int prey,int prex)
  938. #else
  939. short set_THE_defaults(prey,prex)
  940. int prey,prex;
  941. #endif
  942. /***********************************************************************/
  943. {
  944. /*------------------------- external data -----------------------------*/
  945.  extern short prefix_width;
  946. /*--------------------------- local data ------------------------------*/
  947.  short rc=RC_OK;
  948. /*--------------------------- processing ------------------------------*/
  949. #ifdef TRACE
  950.  trace_function("default.c: set_THE_defaults");
  951. #endif
  952. /*---------------------------------------------------------------------*/
  953. /* This function is for resetting all default values for THE           */
  954. /* compatibility mode.                                                 */
  955. /*---------------------------------------------------------------------*/
  956.  Define("F2");
  957.  Define("F3");
  958.  Define("F4");
  959.  Define("F6");
  960.  Define("F7");
  961.  Define("F8");
  962.  Define("F9");
  963.  Define("F11");
  964.  Define("CURD");
  965.  Define("CURL");
  966.  Define("CURR");
  967.  Define("CURU");
  968. #if defined(UNIX) && !defined(USE_EXTCURSES)
  969.  Define("C-M");
  970.  Define("Do");
  971. # if defined(KEY_TAB)
  972.  Define("KEY_TAB");
  973. # endif
  974. # if defined(KEY_BTAB)
  975.  Define("S-TAB");
  976. # endif
  977.  Define("C-I");
  978. #else
  979.  Define("TAB");
  980.  Define("S-TAB");
  981.  Define("ENTER");
  982. #endif
  983. #ifdef TRACE
  984.  trace_return();
  985. #endif
  986.  return(rc);
  987. }
  988. /***********************************************************************/
  989. #ifdef PROTO
  990. short set_XEDIT_defaults(int prey,int prex)
  991. #else
  992. short set_XEDIT_defaults(prey,prex)
  993. int prey,prex;
  994. #endif
  995. /***********************************************************************/
  996. {
  997. /*------------------------- external data -----------------------------*/
  998.  extern short prefix_width;
  999.  extern bool in_profile;
  1000. /*--------------------------- local data ------------------------------*/
  1001.  short rc=RC_OK;
  1002.  int y=0,x=0;
  1003. /*--------------------------- processing ------------------------------*/
  1004. #ifdef TRACE
  1005.  trace_function("default.c: set_XEDIT_defaults");
  1006. #endif
  1007. /*---------------------------------------------------------------------*/
  1008. /* This function is for resetting all default values for XEDIT         */
  1009. /* compatibility mode.                                                 */
  1010. /*---------------------------------------------------------------------*/
  1011.  Define("F2 sos lineadd");
  1012.  Define("F3 quit");
  1013.  Define("F4 sos tabf");
  1014.  Define("F6 ?");
  1015.  Define("F7 backward");
  1016.  Define("F8 forward");
  1017.  Define("F9 =");
  1018.  Define("F11 spltjoin");
  1019.  Define("CURD cursor screen down");
  1020.  Define("CURL cursor screen left");
  1021.  Define("CURR cursor screen right");
  1022.  Define("CURU cursor screen up");
  1023. #if defined(UNIX) && !defined(USE_EXTCURSES)
  1024.  Define("C-M sos doprefix#sos execute");
  1025. # if defined(KEY_BTAB)
  1026.  Define("S-TAB sos tabfieldb");
  1027. # endif
  1028. # if defined(KEY_TAB)
  1029.  Define("KEY_TAB sos tabfieldf");
  1030. # endif
  1031.  Define("C-I sos tabfieldf");
  1032. #else
  1033.  Define("ENTER sos doprefix#sos execute");
  1034.  Define("S-TAB sos tabfieldb");
  1035.  Define("TAB sos tabfieldf");
  1036. #endif
  1037. #ifdef TRACE
  1038.  trace_return();
  1039. #endif
  1040.  return(rc);
  1041. }
  1042. /***********************************************************************/
  1043. #ifdef PROTO
  1044. short set_KEDIT_defaults(int prey,int prex)
  1045. #else
  1046. short set_KEDIT_defaults(prey,prex)
  1047. int prey,prex;
  1048. #endif
  1049. /***********************************************************************/
  1050. {
  1051. /*------------------------- external data -----------------------------*/
  1052.  extern short prefix_width;
  1053.  extern bool in_profile;
  1054. /*--------------------------- local data ------------------------------*/
  1055.  short rc=RC_OK;
  1056.  int y=0,x=0;
  1057. /*--------------------------- processing ------------------------------*/
  1058. #ifdef TRACE
  1059.  trace_function("default.c: set_KEDIT_defaults");
  1060. #endif
  1061. /*---------------------------------------------------------------------*/
  1062. /* This function is for resetting all default values for KEDIT         */
  1063. /* compatibility mode.                                                 */
  1064. /*---------------------------------------------------------------------*/
  1065.  Define("F2 sos lineadd");
  1066.  Define("F3 quit");
  1067.  Define("F4 sos tab");
  1068.  Define("F5 sos makecurr");
  1069.  Define("F6 ?");
  1070.  Define("F7 ");
  1071.  Define("F8 dup");
  1072.  Define("F9 =");
  1073.  Define("F11 spltjoin");
  1074.  Define("F12 cursor home");
  1075.  Define("CURD");
  1076.  Define("CURL cursor kedit left");
  1077.  Define("CURR cursor kedit right");
  1078.  Define("CURU");
  1079. #if defined(UNIX) && !defined(USE_EXTCURSES)
  1080.  Define("C-M");
  1081. # if defined(KEY_TAB)
  1082.  Define("KEY_TAB");
  1083. # endif
  1084. # if defined(KEY_BTAB)
  1085.  Define("S-TAB");
  1086. # endif
  1087.  Define("C-I");
  1088. #else
  1089.  Define("ENTER");
  1090.  Define("TAB");
  1091.  Define("S-TAB");
  1092. #endif
  1093.  
  1094. #ifdef TRACE
  1095.  trace_return();
  1096. #endif
  1097.  return(rc);
  1098. }
  1099.